
package com.pablosz.worm.util;

import java.util.ArrayList;

public class Hashtable<V>
{
	private ArrayList<String> keys;
	private ArrayList<HashtableValue<V>> values;
	private ArrayList<HashtableValue<V>> values0;
	
	public Hashtable()
	{
		keys = new ArrayList<String>();
		values = new ArrayList<HashtableValue<V>>();
		values0 = new ArrayList<HashtableValue<V>>();
	}
	
	public void put(String key,V value)
	{
		int pos = keys.indexOf(key);
		if( pos>=0 )
		{
			// ya existia el key... lo reemplazo
			values.get(pos).value = value;
		}
		else
		{
			keys.add(key);
			values.add(new HashtableValue<V>(value));
			values0.add(new HashtableValue<V>(value));
		}
	}
	
	public V getAndIfNull(String key, V putIfNull)
	{
		V ret = get(key);
		if( ret==null )
		{
			put(key,putIfNull);
			ret = putIfNull;
		}
		
		return ret;
	}
	
	private V _get(String key,ArrayList<HashtableValue<V>> v)
	{
		int i=0;
		for(String k:keys)
		{
			if( k.equals(key) )
			{
				break;
			}
			i++;
		}
		
		return i>=keys.size()?null:v.get(i).value;		
	}
	
	public V get(String key)
	{
		return _get(key,values);
	}
	
	public void resetValue(String key)
	{
		put(key,_get(key,values0));
	}
	
	public void resetValues()
	{
		for(String k:getKeys())
		{
			resetValue(k);
		}
	}
	
	public ArrayList<String> getKeys()
	{
		return keys;
	}
	
	public void toDebug(String sep)
	{
		System.out.println(sep);
		for(String k:getKeys())
		{
			System.out.println("key=["+k+"], value=["+get(k)+"], value0=["+_get(k,values0)+"]");
		}		
	}
}
